home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 6 / QRZ Ham Radio Callsign Database - Volume 6.iso / mac / files / amiga / csrc720j.lzh / audio.c < prev    next >
C/C++ Source or Header  |  1993-01-10  |  2KB  |  86 lines

  1. /* audio.c */
  2.  
  3.  
  4. /* things for 'beep' support */
  5.  
  6. /* This code is from Dave Wecker's vt100 2.7 */
  7. #include <exec/types.h>
  8. #include <exec/exec.h>
  9. #include <exec/memory.h>
  10. #include <devices/audio.h>
  11. #include <string.h>
  12. #include <stdlib.h>
  13.  
  14. #define BEEPSIZE    10L
  15. #define BEEPFREQ    1000L
  16. #define COLORCLOCK  3579545L
  17.  
  18.  
  19. struct IOAudio *Audio_Request = 0;
  20. struct MsgPort *Audio_Port = NULL;
  21. UBYTE  *BeepWave = 0;
  22. UBYTE  Audio_AllocMap[4] = { 1, 8, 2, 4 };
  23. short beepok = 1;
  24.  
  25. initbeep()
  26. {
  27.    Audio_Request = (struct IOAudio *)AllocMem((long)sizeof(*Audio_Request),
  28.                            (long)(MEMF_CHIP|MEMF_CLEAR));
  29.    if(Audio_Request == 0) {
  30.       beepok = 0;
  31.       return(1);
  32.    }
  33.  
  34.    BeepWave = AllocMem(BEEPSIZE,(long)(MEMF_CHIP|MEMF_CLEAR));
  35.    if(BeepWave != 0) BeepWave[0] = 100;
  36.    else {
  37.       beepok = 0;
  38.       return(1);
  39.    }
  40.    Audio_Port = CreatePort((UBYTE *)"Audio Port",0L);
  41.  
  42.    Audio_Request->ioa_Request.io_Message.mn_ReplyPort   = Audio_Port;
  43.    Audio_Request->ioa_Request.io_Message.mn_Node.ln_Pri = 85;
  44.    Audio_Request->ioa_Data          = Audio_AllocMap;
  45.    Audio_Request->ioa_Length       = (ULONG) sizeof(Audio_AllocMap);
  46.  
  47.    if(OpenDevice((UBYTE *)AUDIONAME,0L,
  48.                              (struct IORequest *) Audio_Request,0L)) {
  49.       ttputs("can't open Audio Device\n");
  50.       beepok = 0;
  51.       return(1);
  52.    }
  53.  
  54.    Audio_Request->ioa_Request.io_Command   = CMD_WRITE;
  55.    Audio_Request->ioa_Request.io_Flags   = ADIOF_PERVOL;
  56.    Audio_Request->ioa_Data      = BeepWave;
  57.    Audio_Request->ioa_Length   = BEEPSIZE;
  58.    Audio_Request->ioa_Period   = COLORCLOCK / (BEEPSIZE * BEEPFREQ);
  59.    Audio_Request->ioa_Volume   = 63;
  60.    Audio_Request->ioa_Cycles   = 100;
  61.    return(0);
  62. }
  63.  
  64.  
  65. beep()
  66. {
  67.    if(beepok) {
  68.       Audio_Request->ioa_Volume   = 63;
  69.       BeginIO((struct IORequest *)Audio_Request);
  70.       WaitIO((struct IORequest *)Audio_Request);
  71.    }
  72. }
  73. donebeep()
  74. {
  75.    if(beepok) {
  76.       if(Audio_Request) {
  77.          CloseDevice((struct IORequest *)Audio_Request);
  78.          FreeMem(Audio_Request,sizeof(*Audio_Request));
  79.          Audio_Request = 0;
  80.       }
  81.       if(Audio_Port)DeletePort(Audio_Port);
  82.       if(BeepWave)FreeMem(BeepWave,BEEPSIZE);
  83.    }
  84. }
  85.  
  86.